{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**通用最佳实践回顾**\n",
    "\n",
    "- `std::string_view` 提供对现有字符序列的非拥有（non-owning）视图，可零拷贝地进行切片、比较与遍历；非常适合解析协议、日志、配置等场景，避免在热路径上频繁分配或复制 `std::string`。\n",
    "- 视图不保证以空字符结尾，且不负责底层数据生命周期；必须确保源数据在整个视图使用期间保持有效（尤其是来自临时字符串或局部缓冲时）。\n",
    "- 修改底层字符缓冲会影响所有引用它的 `string_view`；当需要可变视图时可考虑 `std::span<char>`（C++20）或继续使用 `std::string`。\n",
    "- 使用 `remove_prefix`/`remove_suffix`/`substr` 等操作可高效调整窗口；`find`/`starts_with`/`ends_with` 等成员函数可在不分配的情况下完成模式匹配。\n",
    "- 当需要把视图传给只接受 `std::string` 的 API 时，建议延迟转换，并尽量限制转换作用域；无须维护 NUL 终止的场合可直接使用 `string_view::data()`。\n",
    "- 按值传递 `std::string_view` 成本低，适合作为 API 的只读参数；但不要用它绑定到临时 `std::string` 的 `operator+` 结果或其他临时缓冲。\n",
    "- 若视图来自二进制数据或非 UTF-8 字节流，需格外注意编码问题；`string_view` 并不保证文本语义，仅处理字节序列。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "| 序号 | 工程场景                        | 文件名                           | 说明要点                                                     | 可运行示例代码             |\n",
    "| ---- | ------------------------------- | -------------------------------- | ------------------------------------------------------------ | -------------------------- |\n",
    "| 1    | 解析协议/日志/配置的零拷贝切片  | `string_view_log_parse.cpp`      | 展示 `string_view` 对日志行进行分段解析，避免临时字符串分配。 | 示例 1：日志行零拷贝解析   |\n",
    "| 2    | 子串视图（HTTP 头、CSV 字段等） | `string_view_header_fields.cpp`  | 通过 `string_view` 获取 HTTP 头部字段视图，按需转换为 `std::string`。 | 示例 2：HTTP 头字段视图    |\n",
    "| 3    | API 只读参数，避免分配          | `string_view_api_params.cpp`     | 定义接口接收 `std::string_view` 参数，演示调用者可传入多种字符串类型。 | 示例 3：API 使用字符串视图 |\n",
    "| 4    | 正则/搜索前的预切片             | `string_view_regex_preslice.cpp` | 先以 `string_view` 定位目标片段，仅在实际需要时转换为 `std::string` 供正则处理。 | 示例 4：正则前的视图切片   |"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- 示例 1：日志行零拷贝解析（string_view_log_parse.cpp）\n",
    "- 示例 2：HTTP 头字段视图（string_view_header_fields.cpp）\n",
    "- 示例 3：API 使用字符串视图（string_view_api_params.cpp）\n",
    "- 示例 4：正则前的视图切片（string_view_regex_preslice.cpp）"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "C++17",
   "language": "C++17",
   "name": "xcpp17"
  },
  "language_info": {
   "name": "C++17"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
